Skip to content

6fret#1470

Open
theli-ua wants to merge 71 commits into
YARC-Official:devfrom
theli-ua:6fret
Open

6fret#1470
theli-ua wants to merge 71 commits into
YARC-Official:devfrom
theli-ua:6fret

Conversation

@theli-ua

Copy link
Copy Markdown
Contributor

This is a little awkward to play/read but seems to be fully functional.
I let bots play and I played it with an actual ghl live guitar.
Basic idea is to have six fret be based on five fret engine.
This does NOT have 6fret specific notes and simply reuses ones from regular notes.

There are more details in YARC-Official/YARG.Core#373

Opening before I put more time into it in case this is a wholly wrong direction.

if necessary I could hide behind experimental toggle.

Leaving in draft for now as I need to find time to review this myself before proper pr. But open to early feedback if someone decides to check it out as well.

theli-ua and others added 30 commits April 22, 2026 11:33
Add SixFretGuitar property reusing FiveFretGuitarPreset type. Register
in serialization and copy methods.

Co-authored-by: opencode <opencode@local>
Extract hardcoded 5-fret patterns to virtual methods: GetFretActionMax,
GetFretFromAction, GetFretIndex, GetDefaultHighwayOrdering. Change LANE_COUNT
to virtual LaneCount property.

Co-authored-by: opencode <opencode@local>
Override LaneCount=6, highway ordering [0,3,1,4,2,5], fret mappings,
engine creation (YargSixFretGuitarEngine), and initialization to use
SixFretGuitar presets. Skip range shift setup for 6-fret.

Co-authored-by: opencode <opencode@local>
…ment

Override UpdateColor() to use Player.ColorProfile.SixFretGuitar for
color retrieval. All other functionality inherited from base class.

Co-authored-by: opencode <opencode@local>
…lay scene

Add _sixFretNotes and _sixFretFret to ThemeComponent with switch
cases for VisualStyle.SixFretGuitar. Create SixFretGuitarVisual.prefab
based on FiveFretGuitarVisual with FretCount: 6 and disabled range/shift
indicators. Wire _sixFretGuitarPrefab in Gameplay.unity GameManager.

Co-authored-by: opencode <opencode@local>
…heritance

SixFretGuitarPlayer: remove all SixFretRangeShift references (range shift
is irrelevant for 6-fret), clean up unused fields and methods.

SixFretGuitarNoteElement: inherit directly from NoteElement instead of
sealed FiveFretGuitarNoteElement, use SixFretGuitarFret for fret mapping.

Co-authored-by: opencode <opencode@local>
Co-authored-by: opencode <opencode@local>
Co-authored-by: opencode <opencode@local>
Range shift is a 5-lane-specific mechanic. Remove RANGE_DISABLE toggle
from GameMode.SixFretGuitar's PossibleProfileSettings.

Co-authored-by: opencode <opencode@local>
Update Enum.Instrument localization strings so 6-fret instruments display
with (6-Fret) suffix, matching the pattern used for SortAttribute names.

Co-authored-by: opencode <opencode@local>
Add ToResourceName/FromResourceName mappings for SixFretGuitar,
SixFretBass, SixFretRhythm, SixFretCoopGuitar (guitar6, bass6,
rhythm6, coop6). Expand InstrumentIcons.png and NoInstrumentIcons.png
sprite sheets from 4x4 to 5x4 grid with 6-fret icons featuring a '6'
badge in the corner.

Co-authored-by: opencode <opencode@local>
Ring [7] now shows SixFretGuitar/Bass/Rhythm/CoopGuitar icons with
fallback priority, matching the pattern used for ProGuitar/Coop and
ProBass/Rhythm rings. Ring is hidden if no 6-fret instruments exist.

Co-authored-by: opencode <opencode@local>
Add new column at x=2048 with guitar6, bass6, rhythm6, coop6 icons.
All existing icon coordinates remain unchanged. Uses correct source
coordinates from Unity meta file (guitar, bass, rhythm, guitarCoop).

Co-authored-by: opencode <opencode@local>
guitar6 at (2048,1536), bass6 at (2048,1024), rhythm6 at (2048,0),
coop6 at (2048,512) - all coordinates are now unique.

Co-authored-by: opencode <opencode@local>
Unity meta files use bottom-up Y (y=0 = bottom edge), PIL uses
top-down Y (y=0 = top edge). Conversion: PIL_crop_y = 1536 - Unity_y.

guitar6 at Unity(2048,1536)->PIL(2048,0), bass6 at Unity(2048,1024)
->PIL(2048,512), rhythm6 at Unity(2048,0)->PIL(2048,1536),
coop6 at Unity(2048,512)->PIL(2048,1024).

Co-authored-by: opencode <opencode@local>
Instead of hiding ring 7 entirely when no 6-fret tracks are available,
fall back to showing elite drums icon as a placeholder.

Co-authored-by: opencode <opencode@local>
- Fix SixFretGuitarVisual.prefab: correct objectReference format
  ({0} -> {fileID: 0}) and swap FiveFretGuitarPlayer component for
  SixFretGuitarPlayer
- Fix Gameplay.unity: replace fake GUID with actual SixFretGuitarVisual
  prefab GUID (93bb65c0743846fb28f6ecbb05e1e37b)
- Fix GameMode.SixFretGuitar.ToResourceName() to return "guitar6"
  instead of "guitar" (fixes wrong instrument icon in difficulty
  selection header)
- Add SixFretGuitarPlayer case to GameManager.Debug.cs player type
  switch
- Add 6-fret instruments to GuitarScoreCard.cs icon switch
- Add SixFretGuitar color profile preview mapping to
  PresetSubTab.Generic.cs

Co-Authored-By: pi-coding-agent <pi@coding-agent>
All three themes had _sixFretNotes and _sixFretFret unassigned,
causing "Theme does not support visual style SixFretGuitar" crash.
Point both to 5-fret objects per 6-fret inheritance design.

Co-Authored-By: pi-coding-agent <pi-coding-agent>
SixFretGuitarVisual pool pointed to FiveFretGuitarNote prefab,
causing InvalidCastException when casting to SixFretGuitarNoteElement.
Created SixFretGuitarNote prefab and updated all 3 pool refs.

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: Qwen3.6-27B
SixFretGuitar mode was missing from switch, leaving card null and
causing NRE on card.SetCardContents() after song ends.
SixFretGuitar mode skipped modifier icons on score card.
Uses enginePreset.SixFretGuitar (FiveFretGuitarPreset type).
SubSection dropdown and 6 color field names were absent,
leaving raw field names in the color profile settings UI.
Bindings.SixFret.Black1/White1 etc. had no localization entry,
so binding UI showed raw keys.

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: Qwen3.6-27B
Add profile setting SixFretSplitLanes (default false) for combined lane display.
Solo notes in a combined pair render wider and centered; paired notes stay normal.

- Bump PROFILE_VERSION to 8, serialize/deserialize SixFretSplitLanes
- Add SIX_FRET_SPLIT_LANES string and PossibleProfileSettings entry
- SixFretGuitarPlayer: pair detection via chord, IsPaired flag, SetCombinedSpan
- SixFretGuitarNoteElement: combined center X, 2x scale, sustain width/offset
- LaneElement: SetCombinedSpan, doubled X scale in RenderScale
- SustainLine: SetWidthMultiplier with reset on Initialize
- ProfileSidebar: toggle wired to profile.SixFretSplitLanes

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: Qwen3.6-27B
SixFretGuitarPlayer copy-pasted ~90 lines of CreateEngine() from
base, fragile to any base change. Extract 3 protected virtual hooks
so derived class overrides only the varying points:

  GetBassInstrument() — instrument to check for bass mode
  GetEnginePreset()   — preset to pass into engine factory
  BuildEngine()       — concrete engine constructor

Also:
- make BassStarMultiplierThresholds protected for reuse
- make OnSustainStart/End protected virtual for override
- deduplicate ModifierIcon guitar cases (switch expression)
- fix Player.Player.Profile typo in SixFretSpawnedNote/Lane
- fix grammar in SixFretGuitarNoteElement comment
- normalize ProfileSidebar line endings (CRLF -> LF)

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: Qwen3.6-27B
@theli-ua

Copy link
Copy Markdown
Contributor Author
output.webm

@wyrdough

Copy link
Copy Markdown
Contributor

Seems promising. Obviously there's some visual stuff to work out, but you definitely seem like you're on the right track!

theli-ua added 24 commits May 1, 2026 11:02
Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: Qwen3.6-27B
Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Add SixFretUp/Down/Barre/HOPO/Tap enum values to ThemeNoteType
- Add ColoredSecondaryMaterials field to ThemeNote for dual-color barre notes
- Add SetSecondaryColor method to NoteGroup for secondary color application
- Remove SixFretSplitLanes from YargProfile, bump PROFILE_VERSION to 9

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Refactor SixFretGuitarPlayer to 3 visual lanes, add IsUpFret/LaneIndex helpers
- Remove SixFretSplitLanes references, update highway ordering for 3 lanes
- Refactor SixFretGuitarNoteElement: add LaneNoteType, remove IsPaired/combined logic
- Update theme model mapping for new 6-fret note types (Up/Down/Barre)
- Remove combined span logic from LaneElement
- Add SetSecondaryColor to SustainLine for barre sustain blending
- Make FiveFretGuitarPlayer.UpdateFretArray protected virtual

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Add secondary half fields to ThemeFret (materials, pressed effect)
- Extend Fret.cs with secondary half initialization, SetPressedSecondary, SetSecondaryColor
- Update FretArray.cs with dual-half Initialize overload, map primary/secondary colors
- Add SetPressedSecondary methods to FretArray
- Override UpdateFretArray in SixFretGuitarPlayer to handle black/white half presses

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Remove SixFretSplitLanes toggle from ProfileSidebar
- Remove SixFretSplitLanes from GameModeExtensions PossibleProfileSettings
- Remove SIX_FRET_SPLIT_LANES constant from ProfileSettingStrings

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Update FakeTrackPlayer SixFretGuitar entry: 3 lanes, new ThemeNoteTypes (Up/Down/Barre)
- Generate Up/Down/Barre notes with correct theme types for preview
- Update FakeNote to map 6-fret frets to 3 lane indices for positioning

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Mark all Phase 1-5 tasks as completed in docs
- Defer theme prefab creation and manual testing to subsequent tasks

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Fix _lanePositions field override error in SixFretGuitarPlayer
- Make GetLaneIndex public for note element access
- Fix System.Drawing.Color/UnityEngine.Color ambiguity in SixFretGuitarNoteElement
- Add CurrentGameMode property to FakeTrackPlayer
- Fix AllNotes.Any() to foreach loop in SixFretGuitarPlayer

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Restore file to working state from commit 1b0e6fd
- Add CurrentGameMode property as class member (not inside dictionary)
- Add 6-fret entry with 3 lanes, Up/Down/Barre note types

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Move _coloredSecondaryMaterialCache initialization into Initialize()
- Remove ??= pattern, use direct assignment like existing caches
- All LINQ (Select/ToArray) now only runs once in Initialize()

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Add _SecondaryColor and _SecondaryEmissionColor shader property IDs
- SetSecondaryColor now uses dedicated properties so primary/secondary
  can coexist on same material without overwriting each other
- Primary: material.color + _EmissionColor
- Secondary: _SecondaryColor + _SecondaryEmissionColor

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
- Add _secondaryColor and _secondaryEmissionColor static readonly ints
- WhitenFretColor: use _secondaryEmissionColor for secondary materials
- RestoreFretColor: use _secondaryEmissionColor for secondary materials
- SetSecondaryColor: use _secondaryColor and _secondaryEmissionColor

Now both primary and secondary can coexist on same material.

Co-Authored-By: pi-coding-agent <pi-coding-agent>
Model: tencent/hy3-preview
@theli-ua theli-ua marked this pull request as ready for review May 6, 2026 16:32
@theli-ua

theli-ua commented May 6, 2026

Copy link
Copy Markdown
Contributor Author

This now has an original implementation of up/down/bar notes for the rectangular theme. no more 6-lane mode

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants